你的第一个 Dora 游戏第六章:玩家角色:主角的实现本页总览第六章:玩家角色:主角的实现 在这一章中,我们将进一步完善玩家角色的实现。通过为玩家角色添加更多功能和互动逻辑,打造一个更加有趣和丰富的游戏体验。本章重点内容包括: 限制玩家角色的移动范围 添加玩家角色的碰撞响应 实现玩家角色的游戏结束逻辑 1. 限制玩家角色 的移动范围 在之前的代码中,玩家角色可以自由移动,但未对移动范围进行限制。如果玩家角色超出游戏窗口,可能导致游戏体验不佳。我们将为玩家角色添加移动范围限制。 在 player.loop 的逻辑中,加入限制范围的代码: 示例代码// 计算游戏场景的一半宽高const hw = width / 2;const hh = height / 2;// 玩家移动控制player.loop(() => { const newPos = player.position.add(Vec2(velocityX, velocityY).normalize().mul(10)); // 限制玩家移动范围 player.position = newPos.clamp(Vec2(-hw + 40, -hh + 40), Vec2(hw - 40, hh - 40)); velocityX = 0; velocityY = 0; return false;}); 通过 clamp 函数,我们将玩家的位置限制在游戏窗口的有效范围内。 2. 添加玩家角色的碰撞响应 我们需要为玩家角色设置与敌人碰撞后的响应逻辑,例如:播放音效、显示“游戏结束”的提示,并重置游戏。 首先,在玩家的 onContactStart 回调中,检查与敌人的碰撞: 示例代码import { Body, Audio, thread } from 'Dora';const Player = (world: PhysicsWorld.Type) => { // 创建玩家角色 // ... // 处理玩家角色的碰撞响应 (player as Body.Type).onContactStart(other => { if (other.group === 0) { // 检测与敌人(group 0)的碰撞 // 显示“游戏结束”提示 toNode( <label fontName="Xolonium-Regular" fontSize={80} text="Game Over" textWidth={300}/> ); // 移除玩家角色 player.removeFromParent(); // 停止游戏背景音乐,播放游戏结束音效 Audio.stopStream(0.5); Audio.play('Audio/gameover.wav'); // 重置游戏 thread(() => { sleep(2); Director.entry.removeAllChildren(); toNode(<StartUp/>); // 返回到游戏开始界面 }); } });}; 这段代码实现了当玩家与敌人发生碰撞时的游戏结束逻辑,并通过音效和提示信息增强用户体验。 3. 改进玩家动画与状态管理 为了使玩家角色更加生动,我们可以扩展动画的使用,根据玩家的移动方向切换不同的动画。 在 player.loop 中,根据玩家的移动方向调整角色的角度和动画: 示例代码player.loop(() => { const direction = Vec2(velocityX, velocityY).normalize(); if (direction.length > 0) { // 根据方向调整角色的角度 player.angle = -math.deg(math.atan(direction.y, direction.x)) + 90; // 播放移动动画 if (!isMoving) { isMoving = true; playAnimation(playerAnim, "playerGrey_up"); } } else { // 如果没有移动,切换为站立动画 if (isMoving) { isMoving = false; playAnimation(playerAnim, "playerGrey_walk"); } } // 更新位置并限制范围 const newPos = player.position.add(direction.mul(10)); player.position = newPos.clamp(Vec2(-hw + 40, -hh + 40), Vec2(hw - 40, hh - 40)); velocityX = 0; velocityY = 0; return false;}); 通过动态调整角度和动画,玩家角色的表现将更加贴合操作逻辑。 4. 完成后的玩家角色 最终实现的玩家角色具备以下功能: 在有效范围内自由移动。 碰撞敌人时触发游戏结束逻辑。 根据移动方向自动调整角度和动画。 通过以上内容,玩家角色的基础实现已完成!接下来,我们将在后续章节中实现更加复杂的功能,例如计分系统和游戏难度提升。